Fixing select * series
authorJeroen van der Heijden <jeroen@transceptor.technology>
Tue, 3 Apr 2018 08:55:29 +0000 (10:55 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Tue, 3 Apr 2018 08:55:29 +0000 (10:55 +0200)
src/siri/db/aggregate.c
src/siri/db/series.c
src/siri/parser/listener.c

index 25b1f1819bb18068bd844a015c1e65988f68ef7d..5beda18864b69a064db357cafcb0d6b89451e79c 100644 (file)
@@ -464,14 +464,15 @@ void siridb_aggregate_list_free(slist_t * alist)
  */
 int siridb_aggregate_can_skip(cleri_children_t * children)
 {
-    LOGC("Gid: %d", children->node->children->node->children->node->children->node->cl_obj->gid);
-    switch (children->node->children->node->children->node->children->node->cl_obj->gid)
+    cleri_node_t * nd = \
+            children->node->children->node->children->node->children->node;
+
+    switch (nd->cl_obj->gid)
     {
     case CLERI_GID_F_COUNT:
     case CLERI_GID_F_FIRST:
     case CLERI_GID_F_LAST:
-        return \
-            children->node->children->node->children->node->children->node->children->next->next->next == NULL;
+        return nd->children->next->next->next == NULL;
 
     default:
         return 0;
index 5936f1bec7498c1cb411448387180ca3b7d072b2..6620217ebededa52dcb03592809d5062eae0e15a 100644 (file)
@@ -812,10 +812,8 @@ siridb_points_t * siridb_series_get_first(
         points->data->ts = buf->data->ts;
         points->data->val = buf->data->val;
         points->len = 1;
-        LOGC("First from memory");
         return points;
     }
-    LOGC("First from shard");
 
     (*required_shard)++;
 
@@ -872,12 +870,9 @@ siridb_points_t * siridb_series_get_last(
         points->data->ts = buf->data->ts;
         points->data->val = buf->data->val;
         points->len = 1;
-        LOGC("Last from memory");
         return points;
     }
 
-    LOGC("Last from shard");
-
     (*required_shard)++;
 
     /* if not in the buffer, then if must be in a shard */
@@ -931,7 +926,6 @@ siridb_points_t * siridb_series_get_count(siridb_series_t * series)
         points->data->val.int64 = series->length;
         points->len = 1;
     }
-    LOGC("Count from memory");
     return points;
 }
 
index acdfd314f3cde84d38c671e4d9846c1c73904fdf..2affffa34855b8ba240973d806ddf4bfc0e85915 100644 (file)
@@ -202,6 +202,7 @@ static void enter_set_expression(uv_async_t * handle);
 static void enter_set_ignore_threshold(uv_async_t * handle);
 static void enter_set_name(uv_async_t * handle);
 static void enter_set_password(uv_async_t * handle);
+static void enter_series_all(uv_async_t * handle);
 static void enter_series_name(uv_async_t * handle);
 static void enter_series_match(uv_async_t * handle);
 static void enter_series_re(uv_async_t * handle);
@@ -425,6 +426,7 @@ void siriparser_init_listener(void)
     siriparser_listen_enter[CLERI_GID_SET_PASSWORD] = enter_set_password;
     siriparser_listen_enter[CLERI_GID_SERIES_COLUMNS] = enter_xxx_columns;
     siriparser_listen_enter[CLERI_GID_SERVER_COLUMNS] = enter_xxx_columns;
+    siriparser_listen_enter[CLERI_GID_SERIES_ALL] = enter_series_all;
     siriparser_listen_enter[CLERI_GID_SERIES_NAME] = enter_series_name;
     siriparser_listen_enter[CLERI_GID_SERIES_MATCH] = enter_series_match;
     siriparser_listen_enter[CLERI_GID_SERIES_RE] = enter_series_re;
@@ -1026,7 +1028,6 @@ static void enter_select_stmt(uv_async_t * handle)
     /* child is always the ',' and child->next the node */
     child = query->nodes->node->children->next->node->children;
     skip_get_points = siridb_aggregate_can_skip(child);
-    LOGC("Skip?... %d", skip_get_points);
 
     child = child->next;
     while (child != NULL)
@@ -1041,7 +1042,6 @@ static void enter_select_stmt(uv_async_t * handle)
 
     if (skip_get_points)
     {
-        LOGC("Set skip... %d", skip_get_points);
         q_select->flags |= QUERIES_SKIP_GET_POINTS;
     }
 
@@ -1322,7 +1322,7 @@ static void enter_series_all(uv_async_t * handle)
 {
     siridb_query_t * query = (siridb_query_t *) handle->data;
     siridb_t * siridb = ((sirinet_socket_t *) query->client->data)->siridb;
-    cleri_node_t * node = query->nodes->node;
+    siridb_series_t * series;
     query_wrapper_t * q_wrapper = (query_wrapper_t *) query->data;
 
     /* we must send this query to all pools */
@@ -1332,53 +1332,49 @@ static void enter_series_all(uv_async_t * handle)
         q_wrapper->pmap = NULL;
     }
 
-    if (q_wrapper->update_cb != NULL)
-    {
-        (*q_wrapper->update_cb)(
-                q_wrapper->series_map,
-                q_wrapper->series_tmp,
-                (imap_free_cb) &siridb__series_decref);
-    }
-    q_wrapper->series_tmp = NULL;
-
-        uv_mutex_lock(&siridb->series_mutex);
-
-        q_wrapper->slist = imap_2slist_ref(
-                (   q_wrapper->update_cb == NULL ||
-                    q_wrapper->update_cb == &imap_union_ref ||
-                    q_wrapper->update_cb == &imap_symmetric_difference_ref) ?
-                        siridb->series_map : q_wrapper->series_map);
+    uv_mutex_lock(&siridb->series_mutex);
 
-        uv_mutex_unlock(&siridb->series_mutex);
+    q_wrapper->slist = imap_2slist_ref(
+            (   q_wrapper->update_cb == NULL ||
+                q_wrapper->update_cb == &imap_union_ref ||
+                q_wrapper->update_cb == &imap_symmetric_difference_ref) ?
+                    siridb->series_map : q_wrapper->series_map);
 
-        q_wrapper->series_tmp = (q_wrapper->update_cb == NULL) ?
-                q_wrapper->series_map : imap_new();
+    uv_mutex_unlock(&siridb->series_mutex);
 
-        if (q_wrapper->slist == NULL || q_wrapper->series_tmp == NULL)
-        {
-            MEM_ERR_RET
-        }
+    q_wrapper->series_tmp = (q_wrapper->update_cb == NULL) ?
+            q_wrapper->series_map : imap_new();
 
-        uv_async_t * next =
-                (uv_async_t *) malloc(sizeof(uv_async_t));
+    if (q_wrapper->slist == NULL || q_wrapper->series_tmp == NULL)
+    {
+        MEM_ERR_RET
+    }
 
-        if (next == NULL)
+    for (q_wrapper->slist_index = 0;
+         q_wrapper->slist_index < q_wrapper->slist->len;
+         ++q_wrapper->slist_index)
+    {
+        series = q_wrapper->slist->data[q_wrapper->slist_index];
+        if (imap_add(q_wrapper->series_tmp, series->id, series))
         {
             MEM_ERR_RET
         }
+    }
 
-        next->data = handle->data;
-
-        uv_async_init(
-                siri.loop,
-                next,
-                (uv_async_cb) async_series_re);
-        uv_async_send(next);
+    slist_free(q_wrapper->slist);
+    q_wrapper->slist = NULL;
+    q_wrapper->slist_index = 0;
 
-        uv_close((uv_handle_t *) handle, (uv_close_cb) free);
+    if (q_wrapper->update_cb != NULL)
+    {
+        (*q_wrapper->update_cb)(
+                q_wrapper->series_map,
+                q_wrapper->series_tmp,
+                (imap_free_cb) &siridb__series_decref);
     }
 
-    /* handle is handled or a signal is raised */
+    q_wrapper->series_tmp = NULL;
+    SIRIPARSER_ASYNC_NEXT_NODE
 }
 
 static void enter_series_re(uv_async_t * handle)